package net.comfycastle.musicplayer;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 음악 재생 목록 정보를 갖는 객체
 * 액티비티와 서비스 사이의 데이터 교환을 위해 만들어졌다.
 * Parcelable 인터페이스를 구현했다.
 * @author ricale
 *
 */
public class MusicListInfo implements Parcelable {
	///////////
	//////////
	/////////   variable
	
	private String where;
	private int    start;
	private String orderby;
	
	///////////
	//////////
	/////////   constructor
	
	/**
	 * 생성자
	 */
	public MusicListInfo() {
		
	} // end MusicListInfo
	
	/**
	 * 생성자
	 * @param w 노래의 분류 정보
	 * @param s 노래 목록에서의 시작 트랙 정보
	 * @param o 어떤 순서로 목록이 정렬되었는지에 대한 정보
	 */
	public MusicListInfo(String w, int s, String o) {
		where   = w;
		start   = s;
		orderby = o;
	} // end MusicListInfo(String, int, String)
	
	/**
	 * 생성자
	 * @param src Parcelable 인터페이스에 의해 처리되는 parcel 클래스
	 */
	public MusicListInfo(Parcel src) {
		where   = src.readString();
		start   = src.readInt();
		orderby = src.readString();
	} // end MusicListInfo(Parcel)
	
	///////////
	//////////
	/////////   getter
	
	/**
	 * 노래 분류 정보를 얻는다.
	 * @return 노래 분류 정보 문자열
	 */
	public String getWhere() {
		return where;
	} // end getWhere
	
	/**
	 * 노래 시작 트랙 정보를 얻는다.
	 * @return 노래 시작 트랙
	 */
	public int getStart() {
		return start;
	} // end getStart
	
	/**
	 * 노래 목록 정렬 기준 정보를 얻는다.
	 * @return 노래 목록 정렬 기준 정보
	 */
	public String getOrderby() {
		return orderby;
	} // end getOrderby
	
	///////////
	//////////
	/////////   event listener & callback method
	
	/**
	 * 이 객체를 Parcelable 인터페이스에 맞춰 변환한다.
	 */
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(where);
		dest.writeInt(start);
		dest.writeString(orderby);
	} // end writeToParcel
	
	/** 사용하지 않는다.*/
	@Override
	public int describeContents() {
		return 0;
	} // end describeContents
	
	/**
	 * 이 객체가 Parcelable 인터페이스에 맞춰 변환될 때의 콜백 메서드
	 */
	public static final Parcelable.Creator<MusicListInfo> CREATOR = new Parcelable.Creator<MusicListInfo>() {
		/**
		 * Parcel 객체로부터 MusicListInfo 객체를 생성한다.
		 */
		public MusicListInfo createFromParcel(Parcel in) {
			return new MusicListInfo(in);
		} // end createFromParcel
		
		/**
		 * Pacel.createTypeArray() 가 호출되면 호출된다.
		 */
		public MusicListInfo[] newArray(int size) {
			return new MusicListInfo[size];
		} // end newArray
	}; // end CREATOR
} // end MusicListInfo